package org.jeecgframework.web.service;
import java.util.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jeecgframework.core.common.model.json.AjaxJson;
import org.jeecgframework.core.common.model.json.ComboTree;
import org.jeecgframework.core.common.model.json.Highchart;
import org.jeecgframework.core.common.service.CommonService;
import org.jeecgframework.core.util.oConvertUtils;
import org.jeecgframework.web.system.pojo.base.TSDepart;
import org.jeecgframework.web.system.pojo.base.TSType;
import org.jeecgframework.web.system.pojo.base.ZyCinemaEntity;
import org.jeecgframework.web.system.pojo.base.ZyContactsEntity;


public interface ZyCommonService extends CommonService{
	
	/**
	 * Description 查询影院 
	 */
 	List<ZyCinemaEntity> queryZyCinema();
 	
 	/**
 	 * @author xiul
 	 * 2016-3-29 上午11:36:18
 	 * Description 
 	 * @param tsTypeGroupCode 父级code
 	 * @param tsTypeCode 子级code
 	 * @return 子级
 	 */
 	TSType queryTsType(String tsTypeGroupCode,String tsTypeCode);
 	
 	
 	/**
 	 * @author xiul
 	 * 2016-4-6 上午10:28:24
 	 * Description 根据组织机构orgcode和角色rolecode查询对应角色下的人员
 	 * @param orgCode 组织机构code
 	 * @param roleCode 角色code
 	 * @return list
 	 */
 	public List<Map<String, Object>> queryUserNamesListByOrgCodeAndRoleCode(String orgCode,String roleCode);
 	/**
	 * @author xiul
	 * 2016-4-6 上午10:28:24
	 * Description 根据组织机构orgcode和角色rolecode查询对应角色下的人员 str
	 * @param orgCode 组织机构code
	 * @param roleCode 角色code
	 * @return 拼接的userName eg: john,smith
	 */
 	public String queryUserNamesByOrgCodeAndRoleCode(String orgCode,String roleCode);
 	
 	/**
 	 * @author xiul
 	 * 2016-4-15 下午5:27:50
 	 * Description 根据机构类型和业务范围查询组织机构
 	 * @param orgType StaticValue.DIC_ORG_TYPE
 	 * @param busScope StaticValue.DIC_BUS_SCOPE
 	 * @return
 	 */
 	public List<TSDepart> queryOrgByOrgTypeAndBusScope(String orgType,String busScope);
 	
 	/**
 	 * @author xiul
 	 * 2016-4-18 上午10:17:58
 	 * Description 根据组织机构ID ，角色code ,组织机构业务范围 , 联系人类型 ,联系人职位 查询对应联系人
 	 * @param orgCode 组织机构code
 	 * @param roleCode 角色code
 	 * @param busScope 组织机构业务范围
 	 * @param ctPosition 联系人职位
 	 * @return
 	 */
 	public List<ZyContactsEntity> queryUsersByConditions(String orgCode,String roleCode,String busScope,String ctPosition);

	/**@author xiul
	 * 2016-5-9 上午10:55:19
	 * Description 首页-本年度巡检进度 饼图 查询 
	 * @return
	 */
 	public List<Highchart> queryIpsHighChartData(String type);
 	
 	/**
 	 * @author mhg
 	 * 2018-7-2
 	 * Description 查询巡维修服务单的 当前所有的年份
 	 * @return
 	 */
 	public List<String> queryYearsInIpForRepair();
 	/**
 	 * @author xiul
 	 * 2016-5-11 下午5:30:30
 	 * Description 查询巡检计划中的 当前所有的年份
 	 * @return
 	 */
 	public List<String> queryYearsInIp();

	/**@author xiul
	 * 2016-5-13 下午4:32:11
	 * Description 判断是否是区域工程师
	 * @param id tsUser ID
	 * @return
	 */
	Boolean isAreaEngineer(String id);

	/**
	 * @author xiul
	 * 2016-5-30 下午6:00:28
	 * Description 递归查看 最上级 组织机构
	 * @param depart
	 * @return
	 */
	public TSDepart getUserRootTsDepartCode(TSDepart depart);

	/**@author xiul
	 * 2016-6-16 上午10:27:15
	 * Description 查询巡检流程记录
	 * @param ipId 巡检计划ID
	 */
	List<Map<String, Object>> queryPlanRecord(String ipId);
	
	/**
	 * @author xiul
	 * 2016-6-17 下午2:59:50
	 * Description 根据count sql 返回数量 AS 必须为total
	 * @param sql select count(1) AS total
	 * @return count数量
	 */
	public int getCountBySql(String sql,Object... objs);

	/**
	 * @author xiul
	 * 2016-6-27 下午4:44:19
	 * Description 根据 光路 返回 工程师需要的认证证书级别
	 * @param lightPath 光路
	 * @return 认证证书s
	 */
	public List<String> getEngineerAuthenticationsByLigthPath(String lightPath);
	
	/**
	 * @author xiul
	 * 2016-6-27 下午4:28:34
	 * Description 判断当前巡检单位下是否有此级别工程师认证证书的区域工程师 
	 * @param company 巡检单位 org_code
	 * @param lightPath 光路要求
	 */
	public boolean judgeCompanyHadAreaEnginee(String company,String lightPath);

	/**@author xiul
	 * 2016-7-1 上午11:44:59
	 * Description 首页数据
	 * @param j
	 * @param req
	 */
	public void queryHomePageData(AjaxJson j, HttpServletRequest req);

	/**@author xiul
	 * 2016-7-1 上午11:44:59
	 * Description 首页数据(服务单)
	 * @param j
	 * @param req
	 */
	public void queryHomePageServiceData(AjaxJson j, HttpServletRequest req);


	/**@author xiul
	 * 2016-8-14 下午2:46:51
	 * Description 根据 tsTypegroupCode 查询 tsType
	 * @param 父字典 code
	 */
	List<Map<String, Object>> queryTsTypesByTsTypegroupCode(String tsTypegroupCode);


//	/**
// 	 * @author xiul
// 	 * 2016-8-2 上午10:07:15
// 	 * Description 验证 业务的验证码是否过期 
// 	 * @param sessionId 
// 	 * @param busType 业务标识 
// 	 */
// 	public AjaxJson checkUserRandomCodeTimeout(String sessionId,String busType);
 	
 	/**
 	 * @author xiul
 	 * 2017-04-10 
 	 * Description 验证 业务的验证码是否过期 New
 	 * @param sessionId 
 	 * @param busType 业务标识 
 	 * @param verifyCode 验证码
 	 */
 	public AjaxJson checkUserRandomCodeTimeout(String sessionId,String busType,String verifyCode);
 	
	/**@author xiul
	 * 2016-11-1 下午5:44:18
	 * Description 查询当前登录用户组织机构下的工程师
	 * @param j
	 */
	void queryCurrtDepartEngineer(AjaxJson j);

	
	/**
	 * @author xiul
	 * 2016-9-5 下午2:55:53
	 * Description 发送短信验证码 
	 * @param sessionId SESSION_ID
	 * @param phoneNo 电话号
	 * @param liveTime 验证码存活时间
	 * @param templetePath 发送内容模板
	 * @param templeteMap 发送内容模板 传入参数
	 * @param busType 业务类型 (StaticValue)
	 */
	AjaxJson sendRandomCode(String sessionId, String phoneNo, Integer liveTime, String templetePath,Map<String, Object> templeteMap, String busType);

    public List<Map<String,Object>> sortMap(List<Map<String,Object>> maps);


	/**@author mhg
	 * 2018-6-25
	 * Description 返回备件类型tree
	 * @return
	 */
	public List<ComboTree> getEsTypesTreeForIrReport();

	/**@author mhg
	 * 2018-6-25
	 * Description 查询故障率
	 * @return
	 */
	public List<Highchart> queryFaultRateReportData(String cinemaLine,String esTypeIds,String bjTypeIds,String tb,String bp,String countDate_begin,String countDate_end)throws Exception;


	/**@author mhg
	 * 2018-7-6
	 * Description 导出故障率报表
	 * @return
	 */
	public void exportIrReport(String fileName, String tableData,HttpServletResponse response)throws Exception;


}
